查看原文
其他

苏生不惑又写了个小工具

苏生不惑 苏生不惑 2022-08-30

苏生不惑第371 篇原创文章,将本公众号设为星标,第一时间看最新文章。

之前分享过我写的一些工具整理下苏生不惑开发过的那些软件和脚本,不过导出的公众号pdf文件太多想合并成一个,于是用PDFShaper合并pdf,但合并后的pdf没有书签:于是用python写了个pdf合并工具,这里以莫言的公众号文章为例,先下载他的所有公众号文章,详情见我之前的文章 一键批量下载微信公众号文章内容/图片/封面/视频/音频,支持导出html和pdf格式,包含阅读数/点赞数/在看数/留言数  ,导出的文章数据包含文章日期,文章标题,文章链接,文章简介,文章作者,文章封面图,是否原创,IP归属地,阅读数,在看数,点赞数和留言数等,看IP归属地莫言在上海:文章也同步到博客了 https://blog-susheng.vercel.app/#/wechat/%E5%85%AC%E4%BC%97%E5%8F%B7%E8%8E%AB%E8%A8%80%E5%8E%86%E5%8F%B2%E6%96%87%E7%AB%A0

所有音频也下载了:如果是批量下载文章里的音频/视频可以使用我开发的这个小工具我又开发了个公众号音频视频和话题批量下载工具,效果:话题下的音频也支持,代码如下:

topic_url='xxx'
biz=re.search(r'__biz=(.*?)&',topic_url).group(1)
album_id=re.search(r'album_id=(.*?)&',topic_url).group(1)
response = requests.get(topic_url, headers=headers)
voiceids = re.findall('data-voiceid="(.*)"',response.text)
msgids = re.findall('data-msgid="(.*)"',response.text)
links = re.findall('data-link="(.*)"',response.text)
titles = re.findall('data-title="(.*)" data-voiceid',response.text)
print(titles,len(voiceids))
for i,j in zip(titles,voiceids):
 voice_url = f'https://res.wx.qq.com/voice/getvoice?mediaid={j}'
 # print(i,voice_url)
 audio_data = requests.get(voice_url,headers=headers)
 print('正在下载音频:'+i+'.mp3')
 with open(i+'.mp3','wb'as f:
  f.write(audio_data.content)
sys.exit(1)

下载效果:

下载的文章html先转换成pdf:代码如下:

def to_pdf():
    import pdfkit
    print('导出 PDF...')
    htmls = []
    for root, dirs, files in os.walk('.'):
     for name in files:
      if name.endswith(".html"):
       print(name)
       try:
        pdfkit.from_file(name, 'pdf/'+name.replace('.html''')+'.pdf')
       except Exception as e:
        print(e)
def to_word():
    print('导出 word...')
    htmls = []
    for root, dirs, files in os.walk('.'):
        for name in files:
            if name.endswith(".pdf"):
                print(name)
                try:
                    cv = Converter(name)
                    cv.convert('word/'+name.replace('.pdf''')+'.docx')
                    cv.close()
                except Exception as e:
                    print(e)
to_pdf()
# to_word()
 

然后将转换的pdf合并成一个文件并生成书签。代码如下,我打包成工具了,在公众号后台对话框回复 公众号

import logging,os,html
from PyPDF2 import  PdfFileReader, PdfFileWriter,PdfFileMerger
file_writer = PdfFileWriter()
merger = PdfFileMerger()
num = 0
for root, dirs, files in os.walk('.'):
    for name in files:
        if name.endswith(".pdf"):
            print(name)
            file_reader = PdfFileReader(f"{name}")
            file_writer.addBookmark(html.unescape(name).replace('.pdf',''), num, parent=None)
            for page in range(file_reader.getNumPages()):
                num += 1
                file_writer.addPage(file_reader.getPage(page))
with open(r"公众号苏生不惑历史文章合集.pdf",'wb'as f:
    file_writer.write(f)

合并后的效果:点击左侧书签跳转到对应文章pdf(含留言):

当然也可以导出pdf的书签到excel,包含书签名和页码。代码如下:

def bookmark_export(lines):
    bookmark = ''
    for line in lines:
        if isinstance(line, dict):
            bookmark += line['/Title'] + ','+str(line['/Page']+1)+'\n'
        else:
            bookmark_export(line)
    return bookmark
with open('公众号苏生不惑历史文章合集.pdf''rb'as f:
    lines = PdfFileReader(f).getOutlines()
    bookmark = bookmark_export(lines)
with open('公众号苏生不惑历史文章合集.csv''a+', encoding='utf-8-sig'as f:
    f.write(bookmark)

最近原创文章:

加入我的知识星球

解除b站番剧区域限制,这个特殊版本的 b 站 app 功能太强了

2022 最新一键下载百度文库/豆丁/道客巴巴/原创力文档

一键批量下载微信公众号文章内容/图片/封面/视频/音频,支持导出html和pdf格式,包含阅读数/点赞数/在看数/留言数

网易云音乐每天自动听歌300首升级LV10,b站每天自动签到升级LV6,京东每天自动签到领京豆,微信运动每天自动修改步数

分享几个音乐神器 APP,免费收听和下载音乐,一键解锁网易云音乐变灰歌曲

整理下苏生不惑开发过的那些软件和脚本

如果文章对你有帮助还请 点赞/在看/分享 三连支持下, 感谢各位!

公众号苏生不惑

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存